with Ada.Text_IO;
with GNAT.IO_Aux;
with Ada.Calendar;
with GNAT.Calendar;

use Ada.Calendar;
use GNAT.Calendar;
use Ada.Text_IO;
use GNAT.IO_Aux;

package body LOG is

task body Semaforo is
   S: Integer := VALOR_INICIAL;
   begin
    loop
      select
        when S > 0 =>
          accept Wait;
          S := S - 1;
      or
          accept Signal;
          S := S + 1;
      or
        terminate;
      end select;
    end loop;
   end Semaforo;

   procedure Logear( str: in String) is

      t:Ada.Calendar.Time;

   begin
      semf.Wait;
      -- aca va el log
      t:= Ada.Calendar.clock;
      EscribirArch (str);
      semf.Signal;
   end Logear;

   procedure Archivo( nombre : in String ) is
   begin
      arch := nombre ;
      Create (F,Out_file, arch,"777" );
      Put_Line ("Archivo creado (" & arch & ")");
      Close  (F);
   end Archivo;

   procedure EscribirArch( datos: in String ) is
      t : Time;
      hora : Integer;
      minuto : Integer;
      segundo : Integer;
      mili : Second_duration;
   begin
      if not file_exists (arch) then
         Create (F,Out_file, arch,"777" ) ;
         Close (F);
      end if;
      --Put_Line ("Archivo abierto");

      Open(F,Append_file, arch ) ;
      t := clock;
      hora := Hour(t);
      minuto := Minute (t);
      segundo := Second (t);
      mili    := Sub_Second (t);
      Put_Line (F, Integer'image(hora) & ":" & Integer'image (minuto) & ":" &
                Integer'image (segundo) & ": " & Second_duration'image(mili) & "       " & datos);
      Close (F);

      --Put_Line ("Archivo cerrado");
   end;

end LOG;
